<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Release Notes</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../index.html" title="Chapter 1. Boost.Contract 1.0.0">
<link rel="up" href="../index.html" title="Chapter 1. Boost.Contract 1.0.0">
<link rel="prev" href="../BOOST_CO_idm45125847407536.html" title="Macro BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE">
<link rel="next" href="bibliography.html" title="Bibliography">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../BOOST_CO_idm45125847407536.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="bibliography.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_contract.release_notes"></a><a class="link" href="release_notes.html" title="Release Notes">Release Notes</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_1_0_1">Release 1.0.1</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_1_0_0">Release 1.0.0</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_5_0">Release 0.5.0</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_4_1">Release 0.4.1</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_4_0">Release 0.4.0</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_3_490">Release
      0.3.490</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_3_469">Release
      0.3.469</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_2_190">Release
      0.2.190</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_1_126">Release
      0.1.126</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_1_55">Release
      0.1.55</a></span></dt>
<dt><span class="section"><a href="release_notes.html#boost_contract.release_notes.release_0_1_50">Release
      0.1.50</a></span></dt>
</dl></div>
<p>
      This section contains notes on all releases of this library (from the latest
      to the oldest).
    </p>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_1_0_1"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_1_0_1" title="Release 1.0.1">Release 1.0.1</a>
</h3></div></div></div>
<p>
        September 12, 2019
      </p>
<p>
        Cleanups and small fixes:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Using <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uncaught_exceptions</span></code> on C++17 compilers
            onward (instead of the now obsolete <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uncaught_exception</span></code>).
          </li>
<li class="listitem">
            Fixed a few warnings.
          </li>
<li class="listitem">
            Removed linking to Boost.System (Boost.System is now a header-only library).
          </li>
<li class="listitem">
            Added this library to Boost's Continuous Integration (CI).
          </li>
<li class="listitem">
            Fixed documentation typos.
          </li>
</ol></div>
<p>
        Released files are part of <a href="https://www.boost.org/users/history/" target="_top">Boost
        1.72.0</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_1_0_0"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_1_0_0" title="Release 1.0.0">Release 1.0.0</a>
</h3></div></div></div>
<p>
        January 6, 2018 (Il Giorno della Befana)
      </p>
<p>
        First Boost release:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Fixed all tests to pass as Boost regression tests (and marked those that
            are expected to fail on some specific compiler/platform versions).
          </li>
<li class="listitem">
            Adjusted build scripts to work within Boost libraries.
          </li>
<li class="listitem">
            Updated documentation to fit as a Boost library.
          </li>
</ol></div>
<p>
        Released files are part of <a href="https://www.boost.org/users/history/" target="_top">Boost
        1.67.0</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_5_0"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_5_0" title="Release 0.5.0">Release 0.5.0</a>
</h3></div></div></div>
<p>
        September 2, 2017
      </p>
<p>
        Contracts without the macros:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Using plain C++ code instead of macros to program contracts.
            <div class="orderedlist"><ol class="orderedlist" type="a">
<li class="listitem">
                  The removed macros very hard to use because they required programmers
                  to learn a domain-specific embedded language that replaced the
                  usual C++ syntax for declaring functions and classes.
                </li>
<li class="listitem">
                  The removed macros also made the code less readable, increased
                  compilation time (because of extensive preprocessor meta-programming),
                  and gave cryptic compiler errors.
                </li>
<li class="listitem">
                  However, the removed macros more correctly specified contracts
                  in code declarations instead of definitions, and they completely
                  removed extra code when contracts were disabled (both of those
                  can be done by the current version of this library but at the cost
                  of manually writing some boiler-plate code which was previous automatically
                  handled by the macros instead, see <a class="link" href="extras.html#boost_contract.extras.separate_body_implementation" title="Separate Body Implementation">Separate
                  Body Implementation</a> and <a class="link" href="extras.html#boost_contract.extras.disable_contract_compilation__macro_interface_" title="Disable Contract Compilation (Macro Interface)">Disable
                  Contract Compilation</a>).
                </li>
</ol></div>
          </li>
<li class="listitem">
            Simplified the library by removing some extra features that were not
            directly related to contract programming, specifically:
            <div class="orderedlist"><ol class="orderedlist" type="a">
<li class="listitem">
                  Removed loop variants (because these are rarely if ever used).
                </li>
<li class="listitem">
                  Removed named and deduced parameters (because these can be programmed
                  directly using <a href="http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html" target="_top">Boost.Parameter</a>).
                </li>
<li class="listitem">
                  Removed concepts (because these can be programmed directly using
                  <a href="http://www.boost.org/doc/libs/1_65_0/libs/concept_check/concept_check.htm" target="_top">Boost.ConceptCheck</a>).
                </li>
<li class="listitem">
                  Removed emulation of virtual specifiers <code class="computeroutput"><span class="identifier">override</span></code>,
                  <code class="computeroutput"><span class="identifier">final</span></code>, and <code class="computeroutput"><span class="keyword">new</span></code> (because <code class="computeroutput"><span class="identifier">override</span></code>
                  can be programmed directly using C++11, while <code class="computeroutput"><span class="identifier">final</span></code>
                  and <code class="computeroutput"><span class="keyword">new</span></code> are rarely
                  if ever used).
                </li>
<li class="listitem">
                  Removed <code class="computeroutput"><span class="keyword">static_assert</span></code>
                  emulation (because this can be programmed directly using C++11,
                  or using <a href="http://www.boost.org/doc/libs/1_65_0/doc/html/boost_staticassert.html" target="_top">Boost.StaticAssert</a>).
                </li>
</ol></div>
          </li>
<li class="listitem">
            Ensuring that old values and return values are copied only once even
            when subcontracting is used with multiple inheritance.
          </li>
<li class="listitem">
            Improved template meta-programming algorithm that searches the inheritance
            tree for subcontracting when multiple inheritance is used.
          </li>
<li class="listitem">
            Exception specifications and function-try blocks apply also to exceptions
            thrown by the contracts, and not just to exceptions thrown by the body.
          </li>
<li class="listitem">
            Added contracts for exception guarantees (using <code class="computeroutput"><span class="special">.</span><span class="identifier">except</span><span class="special">(...)</span></code>,
            etc.).
          </li>
<li class="listitem">
            Added predefined assertion levels for "audit" and "axiom".
          </li>
<li class="listitem">
            Added <code class="computeroutput"><span class="identifier">call_if</span></code> and <code class="computeroutput"><span class="identifier">condition_if</span></code> (assertions requirements
            were supported also by previous revisions of this library but they were
            handled by internal code generated by the contract macros).
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.5.0" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_4_1"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_4_1" title="Release 0.4.1">Release 0.4.1</a>
</h3></div></div></div>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
          This revision of the library passed Boost formal review and it was accepted
          into the Boost libraries (see <a href="https://groups.google.com/forum/?fromgroups=#!topic/boost-list/jQ7OjAmos_Y" target="_top">https://groups.google.com/forum/?fromgroups=#!topic/boost-list/jQ7OjAmos_Y</a>).
        </p></td></tr>
</table></div>
<p>
        August 20, 2012
      </p>
<p>
        Accepted into Boost:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Using non-fix-spaced font in Full Table of Contents section.
          </li>
<li class="listitem">
            Added a couple of notes to the documentation.
          </li>
<li class="listitem">
            Changed <code class="computeroutput"><span class="identifier">CONTRACT_MEMBER_BODY</span><span class="special">(</span><span class="identifier">class_type</span><span class="special">,</span> <span class="identifier">function_name</span><span class="special">)</span></code> to <code class="computeroutput"><span class="identifier">class_type</span><span class="special">::</span><span class="identifier">CONTRACT_MEMBER_BODY</span><span class="special">(</span><span class="identifier">function_name</span><span class="special">)</span></code> so the macro can also be used to declare
            derived classes avoiding using the library syntax even when the base
            class has contracts.
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.4.1" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_4_0"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_4_0" title="Release 0.4.0">Release 0.4.0</a>
</h3></div></div></div>
<p>
        June 4, 2012
      </p>
<p>
        Simplified syntax, added named parameters and concepts:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Simplified syntax by reducing extra parenthesis to the bare necessary
            minimum (using some of the preprocessor parsing techniques originally
            introduced by Boost.LocalFunction).
          </li>
<li class="listitem">
            Postcondition old values only copy the old-of expression (e.g., copy
            just vector size instead of entire vector). This improves performance
            and introduces the <code class="computeroutput"><span class="identifier">ConstantCopyConstructible</span></code>
            requirement just for the old value expression type (e.g., a vector might
            not be copyable while its size always is because it is an integral type).
            Removed the <code class="computeroutput"><span class="identifier">copyable</span></code>
            tag.
          </li>
<li class="listitem">
            Body defined outside the macros (so compiler-errors for definitions retain
            their usual meaning).
          </li>
<li class="listitem">
            Added <code class="computeroutput"><span class="identifier">CONTRACT_CLASS</span></code>
            macro and removed the need to duplicate declaration elements (do not
            repeat function declaration, do not repeat class name in function declaration,
            etc).
          </li>
<li class="listitem">
            Using <code class="computeroutput"><span class="identifier">_TPL</span></code> macros so
            to reduce compile-time (instead of internally making all templates contract
            functions so to use <code class="computeroutput"><span class="keyword">typename</span></code>
            freely).
          </li>
<li class="listitem">
            Overloading no longer requires unique parameter names.
          </li>
<li class="listitem">
            Added C++11-like virtual specifiers.
          </li>
<li class="listitem">
            Added constant assertions plus constant-expressions for select assertion
            if-conditions and for loop variants.
          </li>
<li class="listitem">
            Added named and deduced parameters.
          </li>
<li class="listitem">
            Added concept checking.
          </li>
<li class="listitem">
            Removed the interface to use the library without the macro (programmers
            were required to write too much boiler-plate code for the non-macro interface
            to be actually usable, plus supporting both the macro and non-macro interfaces
            limited what the macros could do).
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.4.0" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_3_490"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_3_490" title="Release 0.3.490">Release
      0.3.490</a>
</h3></div></div></div>
<p>
        March 7, 2010
      </p>
<p>
        Support for most/all C++ constructs:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Added support and examples for <code class="computeroutput"><span class="keyword">volatile</span></code>,
            <code class="computeroutput"><span class="keyword">auto</span></code>, <code class="computeroutput"><span class="keyword">explicit</span></code>,
            <code class="computeroutput"><span class="keyword">export</span></code>, <code class="computeroutput"><span class="keyword">extern</span></code>,
            <code class="computeroutput"><span class="keyword">friend</span></code>, <code class="computeroutput"><span class="keyword">inline</span></code>,
            <code class="computeroutput"><span class="keyword">struct</span></code>, and <code class="computeroutput"><span class="keyword">throw</span></code> (for exception specifications).
          </li>
<li class="listitem">
            Documented that <code class="computeroutput"><span class="keyword">union</span></code> cannot
            be contracted.
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.3.490" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_3_469"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_3_469" title="Release 0.3.469">Release
      0.3.469</a>
</h3></div></div></div>
<p>
        February 21, 2010
      </p>
<p>
        Support for most/all contract programming features:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Removed use of <code class="computeroutput"><span class="identifier">self</span></code>,
            <code class="computeroutput"><span class="identifier">variable</span><span class="special">.</span><span class="identifier">now</span></code>, and <code class="computeroutput"><span class="identifier">variable</span><span class="special">.</span><span class="identifier">old</span></code>
            in writing contracts. Object <code class="computeroutput"><span class="keyword">this</span></code>
            and variables are now accessed as usual in member functions. <code class="computeroutput"><span class="identifier">CONTRACT_OLDOF</span><span class="special">(</span><span class="identifier">variable</span><span class="special">)</span></code>
            is used to access old values in postconditions.
          </li>
<li class="listitem">
            Added <code class="computeroutput"><span class="special">(</span><span class="identifier">precondition</span><span class="special">)</span></code>, <code class="computeroutput"><span class="special">(</span><span class="identifier">postcondition</span><span class="special">)</span></code>,
            and <code class="computeroutput"><span class="special">(</span><span class="identifier">body</span><span class="special">)</span></code> to specify contracts within the function
            signature sequence. If no preconditions then <code class="computeroutput"><span class="special">(</span><span class="identifier">precondition</span><span class="special">)</span>
            <span class="special">({...})</span></code> is simply omitted from
            the sequence (same for postconditions, body is mandatory instead). For
            non-void functions, users can name the result argument with <code class="computeroutput"><span class="special">(</span><span class="identifier">postcondition</span><span class="special">)</span> <span class="special">(</span><span class="identifier">result</span><span class="special">-</span><span class="identifier">name</span><span class="special">)</span> <span class="special">({...})</span></code>.
          </li>
<li class="listitem">
            Changed contract class template to use same syntax as Boost.Function
            (i.e., <code class="computeroutput"><span class="identifier">F</span></code> function type).
          </li>
<li class="listitem">
            Added support for free functions and static member functions.
          </li>
<li class="listitem">
            Added support for subcontracting with multiple inheritance.
          </li>
<li class="listitem">
            Added static class invariants which are always checked (also at constructors
            entry, destructor exit, and by static member functions).
          </li>
<li class="listitem">
            Added block invariants and Eiffel-like loop variants.
          </li>
<li class="listitem">
            Added handlers to customize action on contract failure (default to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>).
          </li>
<li class="listitem">
            Removed feature for automatic contract documentation using Doxygen (this
            is not compatible with added <code class="computeroutput"><span class="special">(</span><span class="identifier">precondition</span><span class="special">)</span></code>,
            <code class="computeroutput"><span class="special">(</span><span class="identifier">postcondition</span><span class="special">)</span></code>, and <code class="computeroutput"><span class="special">(</span><span class="identifier">body</span><span class="special">)</span></code>
            because Doxygen preprocessor is not capable to handle Boost.Preprocessor
            sequences).
          </li>
<li class="listitem">
            Rewritten entire documentation (now using Boost.QuickBook instead of
            Doxygen).
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.3.469" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_2_190"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_2_190" title="Release 0.2.190">Release
      0.2.190</a>
</h3></div></div></div>
<p>
        November 21, 2009
      </p>
<p>
        Compiled on both GCC and MSVC:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Compiled using both GCC (Linux and Cygwin) and MSVC (Windows XP).
          </li>
<li class="listitem">
            Required to use void to specify empty function argument list. This is
            to comply with C++03 standard that does not allow to pass empty macro
            parameters so it does not support empty preprocessor sequences <code class="computeroutput"><span class="special">()</span></code>.
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.2.190" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_1_126"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_1_126" title="Release 0.1.126">Release
      0.1.126</a>
</h3></div></div></div>
<p>
        June 17, 2009
      </p>
<p>
        Added documentation:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
            Completed first documentation draft.
          </li></ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.1.126" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_1_55"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_1_55" title="Release 0.1.55">Release
      0.1.55</a>
</h3></div></div></div>
<p>
        April 19, 2009
      </p>
<p>
        Cleaned-up first release:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
            Reorganized files to cleanup root directory.
          </li>
<li class="listitem">
            Added installation program.
          </li>
</ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.1.55" target="_top">files</a>.
      </p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_contract.release_notes.release_0_1_50"></a><a class="link" href="release_notes.html#boost_contract.release_notes.release_0_1_50" title="Release 0.1.50">Release
      0.1.50</a>
</h3></div></div></div>
<p>
        April 19, 2009
      </p>
<p>
        First release:
      </p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
            First public release.
          </li></ol></div>
<p>
        Released <a href="https://github.com/boostorg/contract/releases/tag/v0.1.50" target="_top">files</a>.
      </p>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2008-2019 Lorenzo Caminiti<p>
        Distributed under the Boost Software License, Version 1.0 (see accompanying
        file LICENSE_1_0.txt or a copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../BOOST_CO_idm45125847407536.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="bibliography.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
